package main

import (
	"fmt"
	"sync"
)

var wg = &sync.WaitGroup{}

func main() {
	str := "Hello,world!"
	charList := []rune(str)

	c := make(chan int)
	//var index int = 0

	wg.Add(2)

	go func() {
		defer wg.Done()
		for {
			select {
			// 不能在外部没有发送channel的情况下，两个goroutine同时等待同一个channel
			case i := <-c:
				if i+1 <= len(charList)-1 {
					c <- i + 1
				}
				fmt.Println("CHAN[1]: ", string(charList[i]))
				if i == len(charList)-1 || i == len(charList)-2 {
					//  当前[len-2]  下一个[len-1] 结束
					//  当前[len-1]  无下一个[] 结束
					return
				}
				//index = i
				//default:
				//	fmt.Println("default1-----", index, len(charList)-1)
				//	if index >= len(charList)-1 {
				//		fmt.Println("RET 1")
				//		return
				//	}
				//	continue
			}
		}
	}()

	go func() {
		defer wg.Done()
		for {
			select {
			case i := <-c:
				if i+1 <= len(charList)-1 {
					// 下一个值放入channel
					c <- i + 1
				}
				fmt.Println("CHAN[2]: ", string(charList[i]))
				if i == len(charList)-1 || i == len(charList)-2 {
					//  当前[len-2]  下一个[len-1] 结束
					//  当前[len-1]  无下一个[] 结束
					return
				}
				//index = i
				//default:
				//	fmt.Println("default2-----", index, len(charList)-1)
				//	if index >= len(charList)-1 {
				//		fmt.Println("RET 2")
				//		return
				//	}
				//	continue
			}
		}
	}()

	c <- 0

	wg.Wait()
	close(c)
	fmt.Println("all task finished.")
}
